使用消息
消息系统提供一种通知事件和交换信息的方法。
消息和参数
MessageArguments 是在消息中传递的参数的基类。Kanzi 为不同的节点和触发器提供内置消息类型。例如,ButtonConcept::ClickedMessageArguments 消息用于按钮: 点击 (Button:Click) 触发器, Page::ActivatedMessageArguments 消息用于页面已激活 (Page Activated) 触发器。
您可以写入自己的消息类型来扩展MessageArguments 类。
消息类型描述:
- 事件或信息的性质
例如,ClickManipulator::ClickMessage和ListBoxConcept::ItemSelectedMessage。 - 描述消息内相关数据的参数
例如,HitTestPointProperty 和 SelectedItemIndexProperty 属性。
您可以使用 PropertyType 对象来描述和访问消息参数。 MessageArguments::setArgument 函数集和 MessageArguments::getArgument 函数通过参数底层存储类型检索参数,如 float、Boolean、Vector3 等。
分派消息
要将消息分派给处理程序,使用 Node::dispatchMessage。该函数定义消息类型和参数,并调用为该消息类型的节点注册的所有处理程序。
Node::dispatchMessage 在函数调用返回之前立即通知处理程序,使处理程序能够立即对消息作出反应。
接收消息
Kanzi 中的所有消息都是路由消息。当派发消息时,系统在隧道进程中从根节点经过达到消息目标,然后在冒泡进程中返回。在场景图中每个通过的节点处,系统寻找已派发消息的处理程序。这样您可以将处理程序安装在有效拦截消息的图形中任何位置,然后才能达到目的或从多个来源收集消息。
在冒泡阶段处理消息,在隧道阶段拦截或过滤消息。
接收程序作为函数实现,并作为指针传递到 Node::addMessageHandler() 和 kzuMessageDispatcherAddTunnellingHandler()。要为接收程序的实现提供环境,注册时向用户数据提供指针。使用 Node::removeMessageHandler() 移除处理程序。
计时器
消息系统带有内置计时器消息支持,可使用 KzuMessageDispatcher 访问。kzuMessageDispatcherAddTimerHandler() 订阅计时器,而 kzuMessageDispatcherRemoveTimerHandler() 取消订阅计时器。订阅期间,设置计时器间隔和计时器行为:
- 调用处理程序时一次,以及超过间隔指定时间时一次。
- 不断为超过的每个间隔重复调用处理程序。
- 在同时对所有计时器消息进行批处理的一帧内,批处理仅调用处理程序一次。
在 Kanzi Studio 中创建自定义消息
要在 Kanzi Studio 中创建自定义消息:
- 在素材库 (Library) 中,按下 Alt 并右键点击属性类型 (Property Types) 并选择 属性类型 (Property Type)。

属性类型编辑器 (Property Type Editor) 即会打开。 - 在属性类型编辑器 (Property Type Editor) 中设置:
- 在命名 (Naming) 类别中设置:
- 名称 (Name),以设置您在Kanzi API 中使用的属性的名称。
属性类型名称不能含有:- 属性名称开头或结尾不能使用句点 (.)
- 空格
- 制表符
- 斜线 (/)
- 反斜杠 (\)
- 井号 (#)
- 左右大括号 ({})
- @ 符号
- 显示名称 (Display Name),以设置您在 Kanzi Studio 中使用的属性的名称。输入<Name> 以使用与您在名称 (Name) 属性中设置的名称相同的名称。
- 类别 (Category),以设置 Kanzi Studio 在属性 (Properties) 和添加属性 (Add Properties) 窗口中的哪个类别显示属性类型。
使用 类别 (Category) 属性可在 Kanzi Studio 中快速找到属性类型。

- 名称 (Name),以设置您在Kanzi API 中使用的属性的名称。
- 使用数据类型 (Data Type) 属性设置其保存的数据类型。 要创建消息,将 数据类型 (Data Type) 设置为 消息 (Message)。
- 在 特定类型 (Type Specific) 部分设置:
- 消息接受的 参数 (Arguments)
- 消息使用的 路由模式 (Routing Mode)
- 在命名 (Naming) 类别中设置:
- 点击保存 (Save)。
您现在可以在应用程序中使用自定义消息。
请参阅设置触发器消息的处理。